// 在介绍了如何关闭 channel 之后，我们就多了一个问题：如何判断一个 channel 是否已经被关闭？我们可以在读取的时候使用多重返回值的方式：
// x, ok := <-ch
// 这个用法与 map 中的按键获取 value 的过程比较类似，只需要看第二个 bool 返回值即可，如果返回值是 false 则表示 ch 已经被关闭。
package main

import (
	"fmt"
	"sync"
	"time"
)

func producer(ch chan int) {

	for i := 1; i < 11; i++ {

		ch <- i
		fmt.Println("插入值", i)
	}
	wg.Done()
}

func consumer(ch chan int) {

	for i := 1; i < 11; i++ {
		time.Sleep(time.Second)
		fmt.Println("取出值", <-ch)
	}

	wag.Done()
}

var wag sync.WaitGroup

func main() {
	ch := make(chan int, 100)

	wag.Add(2)
	go producer(ch)
	go consumer(ch)

	wag.Wait()
	fmt.Println("process end")
}
